查看原文
其他

意外阻止了勒索病毒的全球攻击,我是如何做到的

伯乐在线/黄小非 程序员的那些事 2019-12-05

(点击上方公众号,可快速关注)


编译:伯乐在线/黄小非

如有好文章投稿,请点击 → 这里了解详情


【伯乐在线/程序员的那些事 导读】:5月12日,英国、意大利、俄罗斯等多个国家爆发勒索病毒攻击,中国国内校园网也出现大面积感染。请见我们昨天的推文:《全球爆发计算机勒索病毒(包含应急防范措施)》。

WannaCrypt 勒索病毒开始肆虐后 ,英国的网络安全人员 MalwareTech 博主分析发现,该病毒都会访问一个域名 www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com,如果连接成功,就停止攻击感染其他机器。于是他注册了这个域名,偶然阻止了勒索病毒的全球攻击。

(MalwareTech 的 Twitter 截图)

MalwareTech 博主在事后写了一篇总结文章,以下是伯乐在线的摘编:

我现在终于有时间写写周五发生的事情了,这两天各种电话和 Skype 都快把我催爆了,这件事情也花掉了我整个周末的时间(实际上前后一共花了 4 天时间,连我的工作时间都占了,就是如此)。也许你已经从各种媒体上听说了 WannaCrypt 病毒的事情了,但是我觉得你最好听听我的版本。

我那天早上 10 点钟起床,然后就到“英国电子威胁信息共享平台”上去查看信息,因为我一直在跟踪一个叫 Emotet banking 木马的传播情况,这种木马病毒直至今日还很有威胁。然后我发现,有几个很普通的贴子提到说,有几个公司或者组织被“勒索木马”攻击了,不过这也并不是什么“大新闻”….至少当时还不是。接着我就关了电脑出去和朋友吃午饭了,就是在这个时候,WannaCrypt 勒索木马开始肆虐。

当我下午两点半回到家的时候,我发现信息共享平台上已经到处都是 NHS(英国国家医疗体系)被攻击的消息了,据说全国有好几个NHS 下属机构的系统被木马攻击了,这也让我感觉到很可能要有“大新闻”产生了。尽管勒索型病毒攻击某些公共系统的情况并不新鲜,但是全国范围内的系统同时中招的情况可就不那么寻常了(而且现在 NHS 的雇员也挺聪明了,不会轻易点开带病毒的钓鱼邮件,所以这次能有这么大的传播范围,肯定是有什么其他的病毒传播方式。)

在我的一个好朋友(他是信息安全研究员)和 Kafeine 软件的帮助下,我用最快的速度拿到了一个木马的样本。我在分析环境里运行了这个样本,发现木马会去访问一个未注册的域名( www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com ),然后我就很快注册了。

(域名注册信息)

使用 Cisco Umbrella,我们就能看到木马对特定域名的访问流量情况(当然是在我注册之前),这也能看出来,这次大波的木马攻击是在当地时间早晨 8 点开始的。

在域名传播的同时,我在我的虚拟环境里又运行了一次样本,然后就看到了 WannaCrypt 勒索页面;但是更有意思的是,木马感染了我放在那里的测试文件以后,还尝试在 445 端口(SMB协议使用的就是这个端口)随机连接不同的 IP 地址。这种大量的访问尝试马上让我联想到了漏洞扫描,事实上这种对 SMB 端口的扫描行为也让我回忆起了最近报道过的,NSA 的 ShadowBroker 泄露事件,那个里面就有 SMB 漏洞扫描。当然,我当时没有证据能证明这次攻击就是 SMB 漏洞扫描,或者就是用 NSA 泄露出来的漏洞扫描工具来做的,所以我只能在 Twitter 上贴出我发现的东西,然后追踪木马感染的域名。

“我发现木马样本在安装 WannaCrypt 后会扫描 SMB。其他人找到的情况是不是也是这样?注意到木马是采用 P2P 方式传播。” — MalwareTech (@MalwareTechBlog) May 12, 2017

从反馈来看,我得到了相互矛盾的答案,我很满心焦虑地重新装载了之前的分析环境,然后把木马样本又运行了一遍……结果什么事情也没发生。然后我又修改了 host 文件,这样可以让木马对域名的连接失败,然后我又运行了一遍,结果……木马感染成功了。

我估计你没法想象一个成年人高兴得上蹿下跳的画面吧,而且这个人高兴的理由居然是自己的电脑被勒索木马感染了,但是这个人就是我。

勒索木马第一次运行失败了,但是第二次成功感染了。这说明,只要木马能向特定的域名注册成功,那么就能阻止木马的传播,也能阻止木马感染新的电脑。(一开始我并没有公布这个发现,而是通过逆向工程反复验证,不过现在应该已经有其他人在网上公布了这个方法了。)

所以,这么简单的一个伎俩,怎么就能让全球肆虐的木马病毒停止传播呢?

Talos 写了一篇非常不错的文章来解释这个原理,我在这里直接使用 Darien 的截图来说明:( http://blog.talosintelligence.com/2017/05/wannacry.html )

上面代码做的事情,就是尝试连接我们注册的域名。如果连接失败的话,那么就感染系统,如果连接成功的话,木马就会退出执行(一开始我看这个代码并不是很明白,因为我不知道代码的上下文,也不知道这个函数执行的结果返回上一级会干什么。)

我们一开始认为,这个域名是一个“死亡开关”(Kill Switch),如果出了大问题就可以用它来关闭攻击。不过现在我觉得,这是木马用来切断进一步运行的机制,当然这是一个糟糕的设计。

在沙箱环境里,木马的所有的网络请求都会被拦截,然后沙箱会返回一个虚拟的 IP 地址给木马程序,而不是木马要访问的真正的 IP 地址。这种工作原理的副作用就是,如果木马要求访问一个未注册的域名,沙箱则会告诉木马说访问成功(真实情况下是不可能成功的)。

我觉得勒索木马的作者在程序里故意要访问一个未经注册的域名,这种域名在虚拟机的沙箱环境里会被当做“已注册”来处理,一旦程序发现这些“不应该返回结果”的域名居然返回了结果,那么就知道这是在虚拟机环境里运行的,接着木马程序就会自动退出,阻止进一步的入侵分析行为。这种技术并不是首创,Necurs 木马之前就用过这种伎俩(Necurs 会去访问 5 个随机生成的域名,如果这 5 个域名都返回同一个 IP 地址的话,木马程序就会自动退出)。

然而,因为 WannaCrypt 却是在程序里写死了这个用来验证的假域名,而因为我真的注册了这个域名,所以现在不论是在虚拟机里,还是在真实的计算机上,这个域名都会真的返回响应信息,所以木马无论在任何条件下都会相信自己是在虚拟机里运行,从而自动退出……所以说,我们这不经意的注册行为无意中阻止了木马在传播和进一步的勒索行为。我们会继续持有这个域名,以阻止这个病毒样本的进一步感染。

(伯乐在线补注:原作者感谢了在整个分析过程中帮助过他们的组织和机构,我们这里就省略了。)

现在,我想我终于该睡会儿了。

伯乐在线/程序员的那些事 补充:

① MalwareTech 还制作了一个在线查看中招电脑的实时地图:https://intel.malwaretech.com/WannaCrypt.html

② 5月14日下午,国家网络与信息安全信息通报中心发布紧急通报:

监测发现,在全球范围内爆发的 WannaCry 勒索病毒出现了变种:WannaCry 2.0, 与之前版本的不同是,这个变种取消了 Kill Switch,不能通过注册某个域名来关闭变种勒索病毒的传播,该变种传播速度可能会更快。


请广大网民尽快升级安装 Windows 操作系统相关补丁,已感染病毒机器请立即断网,避免进一步传播感染。



看完本文有收获?请转发分享给更多人

关注「程序员的那些事」,提升编程技能

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存